-- 导入redis的库
local redis = require("resty.redis")
-- 初始化redis对象
local redInit = redis:new()
-- 设置redis的超时时间【连接超时、访问超时、返回数据超时】
redInit.set_timeouts(1000,1000,1000)

-- 封装释放redis连接的方法
local function close_redis(redInit)
    local pool_max_idle_time = 10000 -- 最大空闲时间，单位是毫秒
    local pool_size = 100 -- 连接池大小
    -- 放到连接池
    local ok, err = redInit:set_keepalive(pool_max_idle_time, pool_size)
    if not ok then
        ngx.log(ngx.ERR, "放入redis连接池失败：", err)
    end
end

-- 查询redis的方法，参数分别是ip、端口、和key
local function read_redis(ip, port, key)
    -- 获取连接
    local ok, err1 = redInit:connect(ip, port)
    if not ok then
        ngx.log(ngx.ERR,"连接redis失败：", err1)
        return nil
    end
    -- 查询redis
    local resp, err2 = redInit:get(key)
    if not resp then
        ngx.log(ngx.ERR,"查询失败：", err2, ", key=", key)
    end
    -- 得到数据为空
    if resp == ngx.null then
        resp = nil
        ngx.log(ngx.ERR,"数据为空，key=", key)
    end
    -- 关掉连接
    close_redis(redInit)
    -- 返回数据
    return resp
end


-- 封装函数，发送http请求，并解析响应
local function read_http(path, params)
    -- 发送请求
    local resp = ngx.location.capture(path, {
        method = ngx.HTTP_GET,
        args = params
    })
    if not resp then
        -- 请求失败，
        ngx.log(ngx.ERR, "http not found, path:",path,",args:",args)
        ngx.exit(404)
    end
    -- 返回响应信息
    return resp.body
end

-- 将方法导出
local _M={
    read_http = read_http,
    read_redis = read_redis
}
return _M